{ Классы составляющие перемещаемый объект объект

  Module is a part of project http://code.google.com/p/drivers-training-request
  Copyright (C) 2012 leoniv.vlasov@gmail.com

  This source is free software; you can redistribute it and/or modify it under
  the terms of the GNU General Public License as published by the Free
  Software Foundation; either version 2 of the License, or (at your option)
  any later version.

  This code is distributed in the hope that it will be useful, but WITHOUT ANY
  WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
  FOR A PARTICULAR PURPOSE.  See the GNU General Public License for more
  details.

  A copy of the GNU General Public License is available on the World Wide Web
  at <http://www.gnu.org/copyleft/gpl.html>. You can also obtain it by writing
  to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston,
  MA 02111-1307, USA.
}
unit TransfObjectsClasses;

{$mode objfpc}{$H+}

interface

uses
  Classes, SysUtils,fgl,Grids,ComCtrls,commonetypes,dom,db,base64,Controls,StdCtrls,EditBtn,MaskEdit,ConsoleFrm,stringdynarray,Graphics,LazUTF8;
const
  fstrValueUnmasked='Значение Не соответствует маске: "%S"';
  fstrValueUnValid='Поле:["%S"] имеет не верное значение: ["%S"]. Причина: %S';
  fstrConverErrNative='Ошибка конвертации значения. %S';
  fstrConverErrFildContext='Поле:["%S"] Значение:[%S] не может быть приведено к типу:[%S]';
  fstrUnknounFildTypeErr='Не известный тип. %S';
  fstrUnknounFildTypeErrContext='Метод:[%S] Тип:[%S]';
  fstrUnknounComboBoxValue='Не верное значение выподающего списка. %S';
  fstrUnknounComboBoxValueContext='ComboBox:[%S] Form:[%S] Value:[%S]';
  //DateTabble
  fstrDataTabtleRowExportConext='To %S Coll=%s Row=%d ErrMess:{%S}';
  fstrDataTabtleRowExportNative='Ошибка экспорта %S';
  fstrDataTabtleRowImportConext='From %S Coll=%s Row=%d ErrMess{%S}';
  fstrDataTabtleRowImportNative='Ошибка импорта %S';
type
//Типы данных приводятся к пяти основным типам данных sqlite3
//Все поля таблиц в базе данных длжны иметь следующие типы данных
//TEXT = bdtText
//INTEGER = bdtInt
//REAL = bdtFloat
//TEXT = bdtText
//BLOB = bdtBLOB
//Тип bdtDate = Тип TEXT хранит строку представления даты в формате ISO
TBaseFieldType = (bdtInt,bdtFloat,bdtText,bdtDate,bdtBLOB);//Основные типы данных полей
const
  BaseFieldTypeDesc:Array[bdtInt..bdtBLOB] of String =('bdtInt','bdtFloat','bdtText','bdtDate','bdtBLOB');
Type
TDataSetField = TField;
TValidateValueFunction = function(Value:String;Var Cause:String):Boolean;//Функция валидации значения поля если false значение не пршло проверку причина в строке Cause
TNormalizeValueFunction = function(Value:String):String;//Функция нормализации строки


//Исключения
{ ETransferObjErr }


ETransferObjErr = Class(Exception)
private
 FContext           : String;
 FOriginalException : Exception;
public
 constructor Create(NativeError, Context : String; E: Exception);
 Destructor Destroy;
 property Context : String read FContext;
 property OriginalExcaption : Exception read FOriginalException;
end;

EFieldDescErr = Class(ETransferObjErr)

end;

EDataTableErr = Class(ETransferObjErr)

end;

ETransferObjFildError = Class(ETransferObjErr);
ETransferObjFildTypeNotEmplement = Class(ETransferObjErr);

//Класс полей данных
//
{$I TFieldDescPatternH.inc}
{$I TFieldDescriptorH.inc}
{$I TDataFieldH.inc}

{ IContainerObject }
//Интерфейс контейнерного объекта
IContainerObject = Class

public
    Function Validate(Couse:TMessagesArray):Boolean;virtual;abstract;
    Function LogicalValidate(MessArray:TMessagesArray):Boolean;virtual; abstract;
    function ToXMLString():String;virtual;abstract;
    function ToXMLNode(Const XMLDoc:TXMLDocument):TDOMElement;virtual;abstract;
    procedure FromXMLNode(Node:TDOMElement);virtual;abstract;
    function ReadFromDB(Const DBConnect:TDatabase;MessArray:TMessagesArray):Boolean;virtual;abstract;
    function WriteToDB(Const DBConnect:TDatabase;MessArray:TMessagesArray):Boolean;virtual;abstract;
    function ReadFromXmlFile(Const FileName:String;MessArray:TMessagesArray):Boolean;virtual;abstract;
    function WriteToXMLFile(Const FileName:String;MessArray:TMessagesArray):Boolean;virtual;abstract;
end;
//Таблица объекта
{$I TDataTableH.inc}
{$I TTableOfObjectH.inc}
//Поля объекта


implementation


{$I TFieldDescPattern.inc}
{$I TFieldDescriptor.inc}
{$I TDataField.inc}
{$I TTableOfObject.inc}
{$I TDataTable.inc}

{ ETransferObjErr }
constructor ETransferObjErr.Create(NativeError, Context: String; E: Exception);
begin
  Inherited CreateFmt(NativeError,[Context]);
  FContext := Context;
  FOriginalException := E;
end;

destructor ETransferObjErr.Destroy;
begin
  if FOriginalException<>nil then
   FOriginalException.Free;
  Inherited;
end;

end.

